/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlet;

import Utils.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Daniel
 */
@WebServlet(name = "Studente", urlPatterns = {"/Home_Studente" , "/Corsi_Studente" , "/Study_Plan"})
public class Servlet_Studente extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    
    /*
     * Author = DANIEL
     * Utilizzata = questa classe verra usata per gestire tutte le pagine di studente
     * al momento è usata solo per creare l'interfaccia di home_studente
     * Qaundo si chiede al server la pagina home_studente se non si è fatto il login la pagina ti reindirizza la.
     * Aggiungeremo piu avanti messaggi di errore 
     *
     * 
     */
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
       
        User user = (User)request.getSession().getAttribute("user");
        
        if(user == null){
            response.sendRedirect("index.jsp?error= Prima di accedere è necessario fare il login"); 
            return ;
        }
        
        String contex = request.getRequestURI();
        
        if(contex.equals("/Sito_ingegneria/Home_Studente")) 
            {
            Studente tmp = (Studente) Query_Studente.query_dati_studente(user.getId(), user.getName());
            request.setAttribute("result", tmp);
            request.getRequestDispatcher("Home_Studente.jsp").forward(request , response);    
            }
            
           else if(contex.equals("/Sito_ingegneria/Study_Plan")) 
             {              
               Studente tmp = (Studente) Query_Studente.query_dati_studente(user.getId() , user.getName());
               
               String operazione = request.getParameter("operazione");
               
               
               if(operazione != null)   
                  {
                      if(operazione.equals("OK"))
                        {
                            StudyPlan plan = tmp.getActivePlan();
                            int corso = Integer.parseInt(request.getParameter("corso_id"));
                            plan.aggiungi_autocertificazione(user, corso, request.getParameter("voto"));      
                        }      
                  }         
               StudyPlan primo =   tmp.getPlan_anno1();
               StudyPlan secondo = tmp.getPlan_anno2();
               StudyPlan terzo =   tmp.getPlan_anno3();
               
               request.setAttribute("plan1", primo);
               request.setAttribute("plan2", secondo);
               request.setAttribute("plan3", terzo);
               
               request.getRequestDispatcher("Study_Plan.jsp").forward(request , response);  
                 
             }
            else
             {
              List <Corso> tmp = null;
              Corso corso = new Corso(); 
              Studente stud =(Studente) Query_Studente.query_dati_studente(user.getId(), user.getName());
              StudyPlan plan = stud.getActivePlan(); 
              String corso_sel = request.getParameter("corso_sel");
              String error ="";
              
              
              if(request.getParameter("corso_target") != null)
                  {
                      tmp = Query_corsi.query_lista_corsi_da_plan(user.getName(), Integer.parseInt(request.getParameter("corso_target")));
                      corso = tmp.get(0);   
                  }
                  else
                {
                if(corso_sel == null)
                    {
                       String corso_nome = request.getParameter("corso_nome"); 
                            if((corso_nome != null))
                               tmp = Query_corsi.query_lista_corsi(user.getName(), corso_nome);     
                            else
                               tmp = new ArrayList <Corso> (); 
                    }
                else
                    {

                        tmp = Query_corsi.get_corsi(user.getName());
                        
                        corso = tmp.get(Integer.parseInt(corso_sel));
                        
                        if(request.getParameter("operazione")!=null)
                            {
                        String command = request.getParameter("operazione");
                        
                        if(command.equals("Aggiungi al plan"))
                            {
                                if(!plan.aggiungi_nuovo_corso(user , corso))
                                   error="Errore durante l'aggiunta del corso al plan";
                                else
                                   error="Corso aggiunto al plan";
                                
                            }   
                        else 
                           {    
                               if(!plan.rimuoviCorso(user, corso.getId()))  
                                error="Errore durante l'eliminazione del coro dal plan";
                               else
                                error="Corso eliminato dal plan";
                                    
                           }  
                           }}}    
              
            request.setAttribute("result", tmp);
            request.setAttribute("corso", corso);
            request.setAttribute("plan", plan);
            request.setAttribute("error", error);
            request.getRequestDispatcher("Corsi_Studente.jsp?").forward(request, response);  
    
             }
        
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
